﻿using System;
using System.Collections.Generic;
using System.Text;
using METODESA.Server.Data.METODESA.Entity;
using NHibernate;
using NHibernate.Expression;

namespace METODESA.Server.Data.METODESA.Nhibernate
{
    public class VentasDao:BaseDao
    {
        public static IList<OrdenVenta> getAllVentas(string type)
        {
            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(OrdenVenta));
                if (type != null && type != "all")
                    myCriteria.Add(Expression.Eq("Estado", int.Parse(type)));
                IList<OrdenVenta> ventas = myCriteria.List<OrdenVenta>();
                return ventas;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public static IList<OrdenVenta> getVentaByCodigo(string search, string type)
        {

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(OrdenVenta));
                if (type != null && type != "all")
                    myCriteria.Add(Expression.Eq("Estado", int.Parse(type)));
                myCriteria.Add(Expression.Eq("id", int.Parse(search)));
                IList<OrdenVenta> ventas = myCriteria.List<OrdenVenta>();
                return ventas;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public static IList<OrdenVenta> getVentaByFecha(string search, string type)
        {
            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(OrdenVenta));
                if (type != null && type != "all")
                    myCriteria.Add(Expression.Eq("Estado", int.Parse(type)));
                myCriteria.Add(Expression.Like("Fecha", '%' + search + '%'));
                IList<OrdenVenta> ventas = myCriteria.List<OrdenVenta>();
                return ventas;
            }

            catch (Exception e)
            {
                return null;
            }
        }

        public static IList<OrdenVenta> getVentaByEmpleado(string search, string type)
        {
            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(OrdenVenta));
                if (type != null && type != "all")
                    myCriteria.Add(Expression.Eq("Estado", int.Parse(type)));
                IList<OrdenVenta> ventas = myCriteria.List<OrdenVenta>();
                IList<OrdenVenta> resultado = new List<OrdenVenta>();


                foreach (OrdenVenta venta in ventas)
                {
                    string nombre = venta.Empleado.Nombre + " " + venta.Empleado.Apellido;
                    if (nombre.Contains(search))
                    {
                        resultado.Add(venta);
                    }

                }
                return resultado;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public static OrdenVenta getVentaById(int id)
        {
            OrdenVenta venta = null;
            Boolean flag = true;

            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                venta = (OrdenVenta)myISession.Load(typeof(OrdenVenta), id);
                flag = false;
            }
            catch (HibernateException e)
            {
                Console.Out.WriteLine(e.Message);

            }

            if (flag)
            {
                //throw new EntityNotExistsException("There's no client with the provided id");
                return null;
            }

            return venta;
      
        }


        public static IList<OrdenVenta> getVentaByCliente(string search, string type)
        {
            try
            {
                myISession = NHibernateHelper.GetCurrentSession();
                ICriteria myCriteria = myISession.CreateCriteria(typeof(OrdenVenta));
                if (type != null && type != "all")
                    myCriteria.Add(Expression.Eq("Estado", int.Parse(type)));
                IList<OrdenVenta> ventas = myCriteria.List<OrdenVenta>();
                IList<OrdenVenta> resultado = new List<OrdenVenta>();


                foreach (OrdenVenta venta in ventas)
                {
                    string nombre = venta.Cliente.Nombre + " " + venta.Cliente.Apellido;
                    if (nombre.Contains(search))
                    {
                        resultado.Add(venta);
                    }

                }
                return resultado;
            }
            catch (Exception e)
            {
                return null;
            }

        }
    }
}
